// package com.qqt.csr.web.service;
//
// import cn.hutool.core.io.FileUtil;
// import cn.hutool.core.util.StrUtil;
// import com.baomidou.mybatisplus.core.toolkit.IdWorker;
// import com.mongodb.BasicDBObject;
// import com.mongodb.DBObject;
// import com.mongodb.client.gridfs.model.GridFSFile;
// import com.qqt.csr.common.enums.FileTypeEnum;
// import com.qqt.csr.common.exception.StatusCode;
// import com.qqt.csr.common.session.SessionContextHolder;
// import com.qqt.csr.common.utils.ServiceAssert;
// import com.qqt.csr.web.dto.file.FileDTO;
// import com.qqt.csr.web.entity.FileMetaData;
// import lombok.extern.slf4j.Slf4j;
// import org.apache.commons.lang3.StringUtils;
// import org.bson.types.ObjectId;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.beans.factory.annotation.Value;
// import org.springframework.data.mongodb.MongoDatabaseFactory;
// import org.springframework.data.mongodb.core.convert.MongoConverter;
// import org.springframework.data.mongodb.core.query.Criteria;
// import org.springframework.data.mongodb.core.query.Query;
// import org.springframework.data.mongodb.gridfs.GridFsResource;
// import org.springframework.data.mongodb.gridfs.GridFsTemplate;
// import org.springframework.stereotype.Service;
// import org.springframework.web.multipart.MultipartFile;
//
// import java.io.IOException;
// import java.util.Date;
//
// @Slf4j
// // @Service
// @Deprecated
// public class MongoFileServiceImpl implements IFileService {
//     @Value("${server.servlet.context-path}")
//     private String servletContextPath;
//     @Value("${file.upload.domainUrl}")
//     private String domainUrl;
//
//     @Autowired
//     private MongoDatabaseFactory mongoDbFactory;
//     @Autowired
//     private MongoConverter mongoConverter;
//
//     @Override
//     public FileMetaData uploadFile(MultipartFile file, FileTypeEnum fileType, String bucketName) throws IOException {
//         String contentType = StringUtils.isNotBlank(file.getContentType()) ? file.getContentType() : fileType.getContentType();
//         String originalFilename = file.getOriginalFilename();
//         String newFilename = renameFileName(originalFilename);
//         long fileSize = file.getSize();
//         log.info("文件上传,原文件名:{},新文件名:{},文件大小:{},文件类型:{}", originalFilename, newFilename, fileSize, contentType);
//
//         DBObject metadata = new BasicDBObject();
//         metadata.put("creatorName", SessionContextHolder.getHeaderInfo().getNickName());
//         metadata.put("creatorId", SessionContextHolder.getHeaderInfo().getUserId());
//         metadata.put("originalFilename", originalFilename);
//
//         ObjectId objectId = getGridFsTemplate(bucketName)
//                 .store(file.getInputStream(), newFilename, contentType, metadata);
//
//         FileMetaData fileMetadata = new FileMetaData();
//         fileMetadata.setFileName(newFilename);
//         fileMetadata.setFileSize(fileSize);
//         fileMetadata.setContentType(contentType);
//         fileMetadata.setFileId(objectId.toString());
//         fileMetadata.setUploadTime(new Date());
//         fileMetadata.setUrl(domainUrl + servletContextPath + "/file/query/" + fileMetadata.getFileId());
//         return fileMetadata;
//     }
//
//     @Override
//     public FileDTO getFileById(String fileId, String bucketName) throws IOException {
//         GridFSFile fsFile = getGridFsTemplate(bucketName).findOne(new Query(Criteria.where("_id").is(fileId)));
//         ServiceAssert.notNull(fsFile, StatusCode.Common.NOT_EXIST.getCode(), "文件不存在");
//
//         GridFsResource resource = getGridFsTemplate(bucketName).getResource(fsFile);
//
//         FileMetaData fileMetadata = new FileMetaData();
//         fileMetadata.setFileName(fsFile.getFilename());
//         fileMetadata.setContentType(fsFile.getMetadata().getString("_contentType"));
//         fileMetadata.setFileSize(fsFile.getLength());
//
//         FileDTO fileDto = new FileDTO();
//         fileDto.setFileMetadata(fileMetadata);
//         fileDto.setInputStream(resource.getInputStream());
//         return fileDto;
//     }
//
//     @Override
//     public void deleteFile(String fileId, String bucketName) {
//         getGridFsTemplate(bucketName).delete(new Query(Criteria.where("_id").is(fileId)));
//     }
//
//     private GridFsTemplate getGridFsTemplate(String bucketName) {
//         return new GridFsTemplate(
//                 mongoDbFactory,
//                 mongoConverter,
//                 bucketName
//         );
//     }
//
//     private String renameFileName(String originalFilename) {
//         if (StringUtils.isBlank(originalFilename)) {
//             return IdWorker.getIdStr();
//         }
//         return IdWorker.getIdStr() + StrUtil.DOT + FileUtil.getSuffix(originalFilename);
//     }
// }
